home *** CD-ROM | disk | FTP | other *** search
/ Archive Magazine CD 1995 / Archive Magazine CD 1995.iso / discs / prog_disc / volume_1 / issue_06 / wimp / text (.txt)
Encoding:
RISC OS BBC BASIC V Source  |  1995-06-15  |  5.0 KB  |  236 lines

  1.  >$.Wimp.Text
  2.  **************************************
  3.  *   Text input within WIMP Windows   *
  4.  *       By Adrian Philip Look        *
  5.  *         30th December 1987         *
  6.  **************************************
  7. ("FX4,0"):
  8. $;" at line ";
  9.  colour=8 
  10. colour,0,0,255
  11.  colour
  12. variables
  13. version=
  14. wimp_initialise
  15. flags=
  16. flags(
  17. %title_type=
  18. title_type(
  19. Qwimp%=
  20. create_window(50,50,500,500,512,512,flags,"Window 1",title_type,top,2)
  21. Quser%=
  22. create_window(50,50,500,500,512,512,flags,"Window 2",title_type,top,2)
  23. open_window(user%,
  24. open_window(wimp%,
  25.  "Wimp_ForceRedraw",-1,0,0,1280,1024
  26. *POINTER
  27.  "Wimp_Poll",mask,block% 
  28.  reason
  29. handle=!block%
  30. wimp_poll(reason,handle)
  31. variables
  32.  block% &100
  33. title_foreground=1
  34. title_background=6
  35. work_area_foreground=1
  36. work_area_background=7
  37. scroll_bar_inner=1
  38. scroll_bar_outer=6
  39. input_colour=3
  40. top=-1
  41. mask=0
  42. amountx=32
  43. amounty=32
  44.  text(1,70,70)
  45. wimp_poll(reason,handle)
  46. 6    *FX19
  47.  reason 
  48.  1  : 
  49. redraw(!block%)
  50.  2  : 
  51. open_window(handle,
  52.  3  : 
  53. close_window(handle)
  54.  6  : 
  55. mouse_click
  56.  8  : 
  57. key_pressed
  58.  10 : 
  59. scroll_acknowledge
  60. wimp_initialise
  61.  version%
  62.  "Wimp_Initialise",0 
  63.  version%
  64. =version%/100
  65. create_window(x0,y0,x1,y1,sizex,sizey,flags,title$,title_type,pos,buttons)
  66. block%!0=x0
  67. block%!4=y0
  68. block%!8=x1
  69. block%!12=y1
  70. block%!16=0
  71. block%!20=0
  72. block%!24=pos
  73. block%!28=flags
  74. block%?32=title_foreground
  75. block%?33=title_background
  76. U"block%?34=work_area_foreground
  77. V"block%?35=work_area_background
  78. block%?36=scroll_bar_outer
  79. block%?37=scroll_bar_inner
  80. block%?38=input_colour
  81. block%!40=0
  82. block%!44=-sizey
  83. block%!48=sizex
  84. block%!52=0
  85. block%!56=title_type
  86. block%!60=buttons*&1000
  87. $(block%+72)=
  88. title$,11)
  89. block%!84=0
  90.  "Wimp_CreateWindow",0,block% 
  91.  handle%
  92. =handle%
  93. flags(tbar,move,vscb,hscb,boqb,scrl,wimp)
  94.  flag%
  95. flag%=0
  96.  tbar 
  97.  flag%=flag% 
  98.  move 
  99.  flag%=flag% 
  100.  vscb 
  101.  flag%=flag% 
  102.  hscb 
  103.  flag%=flag% 
  104.  wimp 
  105.  flag%=flag% 
  106.  boqb 
  107.  flag%=flag% 
  108.  scrl 
  109.  flag%=flag% 
  110.  &100
  111. =flag%
  112. title_type(hasb,text,txhc,txvc,back)
  113.  flag%
  114.  hasb 
  115.  flag%=flag% 
  116.  text 
  117.  flag%=flag% 
  118.  txhc 
  119.  flag%=flag% 
  120.  txvc 
  121.  flag%=flag% 
  122.  back 
  123.  flag%=flag% 
  124. =flag%
  125. open_window(handle,new)
  126.  new 
  127. block%!0=handle
  128.  "Wimp_GetWindowInfo",,block%
  129. block%!28=top
  130.  "Wimp_OpenWindow",,block%
  131. close_window(handle)
  132. !block%=handle
  133.  "Wimp_CloseWindow",,block%
  134. delete_window(handle)
  135. !block%=handle
  136.  "Wimp_DeleteWindow",,block%
  137. scroll_acknowledge
  138. scx=block%!20
  139. scy=block%!24
  140. scx+=(block%!32)*amountx
  141. scy+=(block%!36)*amounty
  142. block%!20=scx
  143. block%!24=scy
  144.  "Wimp_OpenWindow",,block%
  145. mouse_click
  146. pointer_info
  147. set_caret(handle,cx,cy)
  148. key_pressed
  149. char=block%!24
  150.  "Wimp_GetCaretPosition",,block%
  151. handle=!block%
  152. cx=block%!8 
  153. cy=block%!12 
  154.  handle 
  155.  wimp%  : window=0
  156.  user%  : window=1
  157.  24,x0;y0;x1;y1;
  158.  char>31 
  159.  char<127 
  160. "text(window,cx,-cy)=char:cx+=1
  161. )x=(cx-1)*16+x0-scx:y=(cy+1)*32+y1-scy
  162.  x,y-4:
  163.  32,8,char
  164.  char=13 
  165.  cx=(x0 
  166.  16):cy-=1
  167.  char=127 
  168. cx-=1:text(window,cx,-cy)=0
  169. )x=(cx-1)*16+x0-scx:y=(cy+1)*32+y1-scy
  170.  x,y-4:
  171.  cx>31 
  172.  cx=0:cy-=1
  173.  cy<-16 
  174.  cy=-16
  175. cx=cx*16:cy=cy*32
  176. set_caret(handle,cx,cy)
  177. set_caret(handle,cx,cy)
  178.  "Wimp_SetCaretPosition",handle,-1,cx,cy,&10000020
  179. pointer_info
  180.  "Wimp_GetPointerInfo",0,block%
  181. mx=!block%
  182. my=block%!4
  183. handle=block%!12
  184. block%!0=handle
  185.  "Wimp_GetWindowState",0,block%
  186.  cx=mx-x0+scx:cx=(cx 
  187.  16)*16
  188. $cy=-y1+my+scy:cy=(cy 
  189.  32)*32-32
  190. redraw(handle)
  191. !block%=handle
  192.  "Wimp_RedrawWindow",,block% 
  193.  more
  194. which_window
  195. which_window
  196.  handle 
  197.  wimp% :window=0:
  198. show_text
  199.  user% :window=1:
  200. show_text
  201. show_text
  202.  more
  203. !cx0=gx0-x0+scx:cx0=(cx0 
  204. #cy0=gy0-y1+scy:cy0=(cy0 
  205.  32)-1
  206. #cx1=gx1-x0+scx:cx1=(cx1 
  207.  16)+1
  208. 3cy1=gy1-y1+scy:cy1=(cy1 
  209.  32)+1:
  210.  cy1=1 
  211.  cy1=0
  212.  cy=cy0 
  213.  cx=cx0 
  214. /char=text(window,cx,-cy):
  215.  char=0 
  216.  char=32
  217. )x=(cx-1)*16+x0-scx:y=(cy+1)*32+y1-scy
  218.  x,y-4:
  219.  char
  220.  cx,cy
  221.  "Wimp_GetRectangle",,block% 
  222.  more
  223. x0=block%!4
  224. y0=block%!8
  225. x1=block%!12
  226. y1=block%!16
  227. scx=block%!20
  228. scy=block%!24
  229. gx0=block%!28
  230. gy0=block%!32
  231. gx1=block%!36
  232. gy1=block%!40
  233. ;bx=gx0-scx  : 
  234.  all drawing should be relative to bx,by
  235. by=gy1-scy
  236.